package com.voice.call.redis;

import org.springframework.stereotype.Component;

import com.voice.call.utils.JSONUtil;
import com.voice.call.utils.StringUtil;

import java.util.Date;

import javax.annotation.Resource;

//import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;

@Component
public class RedisCacheUtil {
	
	@Resource
    private StringRedisTemplate redisTemplate;
	
	
	/****redis token 处理 start ********/
	public void setRedisToken(RedisToken entity) {
		
		if (entity == null || StringUtil.isEmpty(entity.getToken())) {
			return;
		}
		redisTemplate.opsForValue().set(entity.getToken(), JSONUtil.objectToJson(entity));
	}
	public RedisToken getRedisToken(String token) {
		if (isEmpty(token)) {
            return null;
        }
		String jsonStr = redisTemplate.opsForValue().get(token);
		if (!StringUtil.isEmpty(jsonStr)) {
			return JSONUtil.jsonToObject(jsonStr, RedisToken.class);
		}
		return null;
	}
	/**
	 * token验证   通过验证返回true,否则返回false
	 * @param uid    用户id
	 * @param token  用户token
	 * @return
	 */
	public boolean verifyToken(Integer uid,String token) {
		
		RedisToken entity = getRedisToken(token);
		if (entity == null) {
			return false;
		}
		Date nowDate = new Date();
		if (entity.getTokenExpired().compareTo(nowDate)<0) {
			return false;
		}
		/***
		if (!entity.getId().equals(uid)) {
			return false;
		}
		**/
		return true;
		
	}
	public boolean verifyTokenValue(Integer uid,String tokenValue) {
		if (isEmpty(tokenValue)) {
            return false;
        }
		RedisToken entity = JSONUtil.jsonToObject(tokenValue, RedisToken.class);
		if (entity == null) {
			return false;
		}
		Date nowDate = new Date();
		if (entity.getTokenExpired().compareTo(nowDate)<0) {
			return false;
		}
		return true;
	}
	/****redis token 处理 end ********/
	
	

    /**
     * 添加String的值
     *
     * @param k
     * @param v
     * @Description
     */
    public void set(String k, String v) {
        if (isEmpty(k)) {
            return;
        }
        redisTemplate.opsForValue().set(k, v);
    }

    /**
     * 获取String的值
     *
     * @param k
     * @Description
     */
    public String get(String k) {
        if (isEmpty(k)) {
            return null;
        }
        return redisTemplate.opsForValue().get(k);
    }

    public void del(String k) {
        if (isEmpty(k)) {
            return;
        }
        redisTemplate.delete(k);
    }

    /**
     * 向Hash中添加值
     *
     * @param key   可以对应数据库中的表名
     * @param field 可以对应数据库表中的唯一索引
     * @param value 存入redis中的值
     */
    public void hset(String key, String field, String value) {
        if (key == null || "".equals(key)) {
            return;
        }
        redisTemplate.opsForHash().put(key, field, value);
    }

    /**
     * 从redis中取出值
     *
     * @param key
     * @param field
     * @return
     */
    public String hget(String key, String field) {
        if (key == null || "".equals(key)) {
            return null;
        }
        return (String) redisTemplate.opsForHash().get(key, field);
    }

    /**
     * 判断 是否存在 key 以及 hash key
     *
     * @param key
     * @param field
     * @return
     */
    public boolean hexists(String key, String field) {
        if (key == null || "".equals(key)) {
            return false;
        }
        return redisTemplate.opsForHash().hasKey(key, field);
    }

    /**
     * 查询 key中对应多少条数据
     *
     * @param key
     * @return
     */
    public long hsize(String key) {
        if (key == null || "".equals(key)) {
            return 0L;
        }
        return redisTemplate.opsForHash().size(key);
    }

    /**
     * 删除
     *
     * @param key
     * @param field
     */
    public void hdel(String key, String field) {
        if (key == null || "".equals(key)) {
            return;
        }
        redisTemplate.opsForHash().delete(key, field);
    }

    /**
     * @Description 判断key是否为null
     * @Return
     */
    public Boolean isEmpty(String key) {
        if (key == null || "".equals(key)) {
            return true;
        }
        return false;
    }
    
    /**
     * 批量删除key
     * @param key
     */
    public void batchDel(String key) {
    	 if (key == null || "".equals(key)) {
             return;
         }
    	 redisTemplate.delete(redisTemplate.keys(key));
	}

}
